﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BinhSon.Dao;
using BinhSon.Services.Contracts;
using BinhSon.Services.Impl;

namespace BinhSon.Presentation
{
    public partial class ThaoTacGiaoVien : UserControl
    {
        private readonly IBinhSonServices _bsServices;

        public ThaoTacGiaoVien()
        {
            InitializeComponent();
            this._bsServices = new BinhSonServices();
            this.loadGiaoVienChuNhiem();
            this.loadGiaoVienChamThi();
            this.loadLopHocChuNhiem();
            this.loadLopChamThi();
        }

        private void luuButton_Click(object sender, EventArgs e)
        {
            //validation
            if (string.IsNullOrEmpty(hoVaChuLotTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập họ và chữ lót");
                return;
            }
            if (string.IsNullOrEmpty(tenTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập tên");
                return;
            }
            if (!namRadioButton.Checked && !nuRadioButton.Checked)
            {
                MessageBox.Show("Vui lòng nhập giới tính");
                return;
            }
            if (string.IsNullOrEmpty(noiSinhTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập nơi sinh");
                return;
            }
            if (string.IsNullOrEmpty(emailTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập email");
                return;
            }
            var entity = new GiaoVien
            {
                Ten = tenTextBox.Text,
                HoVaChuLot = hoVaChuLotTextBox.Text,
                Email = emailTextBox.Text,
                NgaySinh = ngaySinhDateTimePicker.Value,
                NoiSinh = noiSinhTextBox.Text,
                GioiTinh = namRadioButton.Checked
            };
            entity.TenDayDu = entity.HoVaChuLot + " " + entity.Ten;
            this._bsServices.ThemGiaoVien(entity);

            //clear value after saving
            tenTextBox.Text = "";
            hoVaChuLotTextBox.Text = "";
            emailTextBox.Text = "";
            ngaySinhDateTimePicker.Value = DateTime.Now;
            noiSinhTextBox.Text = "";

            this.loadGiaoVienChuNhiem();
            this.loadGiaoVienChamThi();
        }

        private void loadGiaoVienChuNhiem()
        {
            var result = this._bsServices.GetListOfGiaoVienChuaChuNhiem().Select(x => new ComboBoxModel
                {
                    Key = x.GiaoVienId,
                    Value = x.TenDayDu
                }).ToList();
            giaoVienComboBox.Items.Clear();
            giaoVienComboBox.Text = "";
            foreach (var comboBoxModel in result)
            {
                giaoVienComboBox.Items.Add(comboBoxModel);
            }
        }

        private void loadGiaoVienChamThi()
        {
            //var result = this.binhsonEntities.GiaoVien.Select(x => new ComboBoxModel
            //    {
            //        Key = x.GiaoVienId,
            //        Value = x.TenDayDu
            //    }).ToList();
            //giaoVien1ComboBox.Items.Clear();
            //giaoVien1ComboBox.Text = "";
            //foreach (var comboBoxModel in result)
            //{
            //    giaoVien1ComboBox.Items.Add(comboBoxModel);
            //}
        }

        private void loadLopHocChuNhiem()
        {
            var dsLopHocCoChuNhiem = this._bsServices.GetListOfLopHocCoChuNhiem();
            var result = this._bsServices.GetListOfLopHocChuaCoChuNhiem(dsLopHocCoChuNhiem)
                    .Select(x => new ComboBoxModel
                    {
                        Key = x.LopHocId,
                        Value = x.TenLop
                    }).ToList();
            lopHocComboBox.Items.Clear();
            lopHocComboBox.Text = "";
            foreach (var comboBoxModel in result)
            {
                lopHocComboBox.Items.Add(comboBoxModel);
            }
        }

        private void loadLopChamThi()
        {
            //var dsLopCoChamThi = this.binhsonEntities.GiaoVien.Where()
        }

        private void phanCongButton_Click(object sender, EventArgs e)
        {
            var selectedGiaoVien = (ComboBoxModel) giaoVienComboBox.SelectedItem;
            if (selectedGiaoVien == null)
            {
                MessageBox.Show("Vui lòng chọn giáo viên");
                return;
            }
            var selectedLopHoc = (ComboBoxModel) lopHocComboBox.SelectedItem;
            if (selectedLopHoc == null)
            {
                MessageBox.Show("Vui lòng chọn học sinh");
                return;            
            }
            this._bsServices.CapNhatLopChuNhiem(selectedGiaoVien.Key, selectedLopHoc.Key);
            
            this.loadGiaoVienChuNhiem();
            this.loadLopHocChuNhiem();
        }

        private void nhapTuFileButton_Click(object sender, EventArgs e)
        {
            var dialog = new OpenFileDialog();
            dialog.Filter = "Excel Workbook(*.xlsx)|*.xlsx|Excel 97-2003 Workbook(*.xls)|*.xls";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    var dataSet = ProcessExcelFile.ImportExcelXLS(dialog.FileName, true);
                    var result = this._bsServices.ImportGiaoVienFromDataSet(dataSet);
                    MessageBox.Show(result ? "File đã được xử lý thành công." : "Xử lý file đã thất bại.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk: " + ex.Message);
                }
            }
        }

        private void xoaDsGiaoVienButton_Click(object sender, EventArgs e)
        {
            this._bsServices.DeleteAllGiaoVien();
        }

        private void phanCong1Button_Click(object sender, EventArgs e)
        {
            var selectedGiaoVien = (ComboBoxModel)giaoVienComboBox.SelectedItem;
            if (selectedGiaoVien == null)
            {
                MessageBox.Show("Vui lòng chọn giáo viên");
                return;
            }
            var selectedLopHoc = (ComboBoxModel)lopHocComboBox.SelectedItem;
            if (selectedLopHoc == null)
            {
                MessageBox.Show("Vui lòng chọn học sinh");
                return;
            }
        }
    }
}
